﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Amoo.Code.Business
{
    public class Comunidade
    {
        public List<Entity.Comunidade> GetAll()
        {
            using (Data.Comunidade comunidade = new Data.Comunidade())
            {
                return comunidade.GetAll();
                comunidade.Dispose();
            }
        }

        public List<Entity.Comunidade> GetAll(Entity.Usuario pUsuario)
        {
            using (Data.Comunidade oComunidade = new Data.Comunidade())
            {
                return oComunidade.GetAll(pUsuario);
                oComunidade.Dispose();
            }
        }

        public Code.Entity.UsuarioComunidade GetPermissionByUser(int pidComunidade, int pIdUsuario)
        {
            using (Data.Comunidade oComunidade = new Data.Comunidade())
            {
                return oComunidade.GetPermissionbyUser(pidComunidade, pIdUsuario);
                oComunidade.Dispose();
            }
        }

        public List<Entity.Comunidade> GetAll(Entity.Usuario pUsuario, int pPropriedade)
        {

            using (Data.Comunidade oComunidade = new Data.Comunidade())
            {
                return oComunidade.GetAll(pUsuario, pPropriedade);
                oComunidade.Dispose();
            }

        }

        public static void SaveUsuarioComunidade(Entity.UsuarioComunidade pUsuarioComunidade) {

            try
            {
                // Se existir atausliza, caso contrário insere.
                // UsuarioComunidadeExistente
                using (Data.Comunidade oComunidade = new Data.Comunidade())
                {
                    if (oComunidade.UsuarioComunidadeExistente(pUsuarioComunidade))
                    {
                        oComunidade.Dispose();
                        oComunidade.Update(pUsuarioComunidade);
                    }
                    else
                    {
                        oComunidade.Dispose();
                        oComunidade.Insert(pUsuarioComunidade);

                    }
                    oComunidade.Dispose();
                }

            }
            catch (Exception)
            {
                
                throw;
            }

        }



        internal static void Insert(Entity.Comunidade pComunidade, Entity.Usuario pUsuario)
        {
            using (Data.Comunidade oComunidade = new Data.Comunidade())
            {

                if (oComunidade.GetIdbyName(pComunidade) != null)
                {
                    throw new Exception("Já existe uma comunidade cadastrada com esse nome. Escolha um outro nome ou entre em contato com o Administrador para se juntar a uma comunidade existente.");
                }
                oComunidade.Dispose();

                oComunidade.Insert(pComunidade);
                oComunidade.Dispose();

                pComunidade.idComunidade = oComunidade.GetIdbyName(pComunidade).idComunidade;
                oComunidade.Dispose();

                oComunidade.Insert(pComunidade, pUsuario);
                oComunidade.Dispose();
            }
        }



        internal Amoo.Code.Entity.Comunidade GetById(Entity.Comunidade pComunidade)
        {
            using (Data.Comunidade oComunidade = new Data.Comunidade())
            {
                return oComunidade.GetbyID(pComunidade);
                oComunidade.Dispose();
            }
        }

        internal static void Alterar(Amoo.Code.Entity.Comunidade pComunidade)
        {
            using (Data.Comunidade oComunidade = new Data.Comunidade())
            {
                oComunidade.Alterar(pComunidade);
                oComunidade.Dispose();
            }
        }
    }
}
